/**
 * @file makeStrins.js
 * @author fuxueshuang <fuxueshaung@Antiy.cn>
 * @createTime 2018-03-19 13:46:07
 */
/**
 * @description 判断属性是否存在
 * @param {any} ele
 * @returns {Boolean}
 */
const isNone = ele => {
  let _type = Object.prototype.toString.call(ele).slice(8, -1)
  return _type === 'Undefined' || _type === 'Null'
}
/**
 * @description 判断属性是否存在
 * @param {any} ele
 * @returns {Boolean}
 */
function transformNone (data) {
  return isNone(data) ? '' : data
}
const desConfig = [
  {
    useKey: 'stype',
    useValue: 'WF',
    name: '防火墙检测',
    oneString: function (data) {
      return ` ${transformNone(data.sip)} 通过${transformNone(data.proto)}协议，访问资产(${transformNone(data.dip)})，处置动作:${data.response_response_action === 'deny' ? '拒绝' : '允许'}`
    }
  },
  {
    useKey: 'stype',
    useValue: 'WAF',
    name: 'WEB应用防火墙',
    oneString: function (data) {
      return ` ${transformNone(data.sip)} 向资产(${transformNone(data.dip)})发起 ${transformNone(data.tag)}，处置动作:${data.response_action === 'deny' ? '拒绝' : '允许'}`
    }
  },
  {
    useKey: 'stype',
    useValue: 'IDS',
    name: '入侵检测',
    oneString: function (data) {
      return `发现 ${transformNone(data.sip)} 通过${transformNone(data.proto)}协议，对资产(${transformNone(data.dip)})发起网络入侵攻击， ${transformNone(data.event_desc)}`
    }
  },
  {
    useKey: 'stype',
    useValue: 'IPS',
    name: '入侵防御',
    oneString: function (data) {
      return `发现 ${transformNone(data.sip)} 通过${transformNone(data.proto)}协议，对资产(${transformNone(data.dip)})发起网络入侵攻击，处置动作:${data.response_action === 'deny' ? '拒绝' : '允许'}`
    }
  },
  {
    useKey: 'stype',
    useValue: 'MALWARE',
    name: '恶意代码检测',
    oneString: function (data) {
      return `发现资产(${transformNone(data.sys_id)})存在恶意代码 ${transformNone(data.md5s)}，病毒名称为 ${transformNone(data.malname)}}`
    }
  },
  {
    useKey: 'stype',
    useValue: 'C2',
    name: 'C&C通讯',
    oneString: function (data) {
      return `发现C&C通讯，资产(${transformNone(data.sys_id)})请求 ${transformNone(data.url)}，受控指令：${transformNone(data.control_content)}`
    }
  },
  {
    useKey: 'stype',
    useValue: 'OS_VUL',
    name: '系统漏洞',
    oneString: function (data) {
      return `发现 ${transformNone(data.vul_name)}(${transformNone(data.cve_id)})，处置结果：${data.disposal_state === 'unfix' ? '未修复' : '已修复'}`
    }
  },
  {
    useKey: 'stype',
    useValue: 'WEB_VUL',
    name: 'Web应用漏洞',
    oneString: function (data) {
      return `发现 ${transformNone(data.vul_name)}，处置结果：${data.disposal_state === 'unfix' ? '未修复' : '已修复'}`
    }
  },
  {
    useKey: 'stype',
    useValue: 'ILLEGAL-ACCESSS',
    name: '违规外联',
    oneString: function (data) {
      return `${transformNone(data.sys_id)} 请求 ${transformNone(data.url)}，处置动作:${data.response_action === 'deny' ? '拒绝' : '允许'}`
    }
  },
  {
    useKey: 'stype',
    useValue: 'ILLEGAL-USE',
    name: '违规接入',
    oneString: function (data) {
      return `${transformNone(data.dev_name)} 接入资产(${transformNone(data.sys_id)})，执行${transformNone(data.action)}，处置动作:${data.response_action === 'deny' ? '拒绝' : '允许'}`
    }
  },
  {
    useKey: 'stype',
    useValue: 'VUL',
    name: '脆弱性',
    oneString: function (data) {
      return `发现 ${transformNone(data.vul_name)}(${transformNone(data.cve_id)})，处置结果：${data.disposal_state === 'unfix' ? '未修复' : '已修复'}`
    }
  },
  {
    useKey: 'stype',
    useValue: 'LOAD_ANA',
    name: '载荷深度分析',
    oneString: function (data) {
      if (data.final_result === 'black') {
        return `经深度分析设备鉴定，${transformNone(data.md5s)}是黑样本，恶意代码名称为${transformNone(data.malname)}`
      } else {
        return `经深度分析设备鉴定，${transformNone(data.md5s)}是白样本`
      }
    }
  },
  {
    useKey: 'stype',
    useValue: 'MALCODE_TRANSTER',
    name: '恶意代码传输',
    oneString: function (data) {
      return `资产(${transformNone(data.sip)})通过${transformNone(data.proto)}协议访问${transformNone(data.dip)}，发现 ${transformNone(data.md5s)}等恶意代码传输行为，其恶意代码名称为${transformNone(data.malname)}`
    }
  },
  {
    userKey: 'stype',
    useValue: 'other',
    name: '',
    oneString: function () {
      return '--'
    }
  }
]
/**
 * 获取对应类型的描述
 *
 * @param {Object} rawData  原始数据
 * @param {String} type  期望获得的描述的类型['des', 'summary']; 默认'des' 返回描述
 */
export const getmakeStringDes = (rawData, type = 'des') => {
  let data = JSON.parse(JSON.stringify(rawData))
  let hasStype = false
  for (let idx = 0, len = desConfig.length; idx < len; idx++) {
    if (desConfig[idx].useValue === data['log_type']) {
      hasStype = true
      if (type === 'des') {
        return desConfig[idx].oneString(data)
      } else if (type === 'name') {
        return desConfig[idx].name
      }
    }
  }
  if (!hasStype) {
    return desConfig[desConfig.length - 1].oneString()
  }
}
